home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 8 / FM Towns Free Software Collection 8.iso / t_os / otohime / src / oteff3.c < prev    next >
Text File  |  1994-06-01  |  7KB  |  366 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <winb.h>
  5. #include <te.h>
  6. #include <fntb.h>
  7. #include <gui.h>
  8. #include <file_dlg.h>
  9. #include <egb.h>
  10. #include <mos.h>
  11. #include <snd.h>
  12. #include <math.h>
  13. #include "otohime.h"
  14. #include "otolib.h"
  15.  
  16. /* fade int & out */
  17. int    fadeDialogId = -1 ;
  18. int    fadeOkBtnId = -1 ;
  19. int    fadePlayBtnId = -1 ;
  20. int    fadeUndoBtnId = -1 ;
  21. int    fadeInfBtnId = -1 ;
  22. int    fadeCanBtnId = -1 ;
  23. int    fadeMesId[32] = -1 ;
  24. int    fadeSubDialogId = -1 ;
  25. int    fadeNumId[4] = -1 ;
  26.  
  27. /* write head */
  28. int    headDialogId = -1 ;
  29. int    headSubDialogId = -1 ;
  30. int    headNumId[6] = -1 ;
  31. int    headMesId[13] = -1 ;
  32. int    headOkBtnId = -1 ;
  33. int    headPlayBtnId = -1 ;
  34. int    headUndoBtnId = -1 ;
  35. int    headCanBtnId = -1 ;
  36. int    headInfBtnId = -1 ;
  37.  
  38.  
  39. /* FADE IN & OUT */
  40.  
  41. int    sndEffectFade()
  42. {
  43.     MMI_SendMessage( fadeDialogId, MM_ATTACH, 1, MMI_GetBaseObj() ) ;
  44.     MMI_SendMessage( fadeDialogId, MM_SHOW, 0 ) ;    /* 全体を見せる */
  45.  
  46.     MMI_ExecSystem() ;        /* Dialog表示へ・・・イベントループ */
  47.  
  48.     MMI_SendMessage( fadeDialogId, MM_ERASE, 0 ) ;
  49.     MMI_SendMessage( fadeDialogId, MM_DETACH, 0 ) ;
  50.  
  51.     return NOERR ;
  52. }
  53.  
  54. /*    initDataIOTFAD:fadeOkBtnId:MJ_DBUTTONL40の呼び出し関数    */
  55. int    fadeOkchk(kobj, messId, argc, pev, trigger)
  56. int        kobj ;
  57. int        messId ;
  58. int        argc ;
  59. EVENT    *pev ;
  60. int        trigger ;
  61. {
  62.     SNDHEAD *head ;
  63.     int f, len ;
  64.     int var, min, max, delta, ptColumn ;
  65.     int i, num[4], start ;
  66.  
  67.     setMsgColor( fadeMesId[0], EXE_COLOR ) ;
  68.  
  69.     unDo() ;
  70.  
  71.     head = (SNDHEAD *)sndBuf1 ;
  72.     f = ( head->freq ) * 1000 / 0x62 ;                /* freq */
  73.     f = ( f + 50 )/100 * 100 ;        /* 10の位を四捨五入 */
  74.     len = head->length ;
  75.     for( i=0 ; i<4 ; i++ )
  76.     {
  77.         MMI_SendMessage( fadeNumId[i], MM_GETNUMBOX, 5,
  78.                             &var, &min, &max, &delta, &ptColumn ) ;
  79.         num[i] = var * f / 100 ;
  80.     }
  81.     start = 32 ;
  82.     for( i=0 ; i<num[0] ; i++ )
  83.     {
  84.         if( (start+i) >= (len+32) )
  85.             break ;
  86.         sndBuf1[ start + i ] = 0x80 ;
  87.     }
  88.     start = start + i ;
  89.     for( i=0 ; i<num[1] ; i++ )
  90.     {
  91.         if( (start+i) >= (len+32) )
  92.             break ;
  93.         sndBuf1[ start + i ] = sndDataMul( sndBuf1[ start + i ], i, num[1] );
  94.     }
  95.  
  96.     start = 32 + len - 1 ;
  97.     for( i=0 ; i<num[3] ; i++ )
  98.     {
  99.         if( (start-i) < 32 )
  100.             break ;
  101.         sndBuf1[start-i] = 0x80 ;
  102.     }
  103.     start = start - i ;
  104.     for( i=0 ; i<num[2] ; i++ )
  105.     {
  106.         if( (start-i) < 32 )
  107.             break ;
  108.         sndBuf1[ start-i ] = sndDataMul( sndBuf1[ start-i ], i, num[2] );
  109.     }
  110.  
  111.     setMsgColor( fadeMesId[0], MOJI_COLOR ) ;
  112.  
  113.     return NOERR ;
  114. }
  115.  
  116. /* xをSNDデータと見なし,それを r/m倍したSNDデータの値を返す */
  117.  
  118. sndDataMul( x, r, m )
  119. int x, r, m ;
  120. {
  121.     x &= 0xff ;
  122.     if( x >= 128 )
  123.         x = 128 - x ;
  124.  
  125.     x = x * r / m ;
  126.  
  127.     if( x <= 0 )
  128.     {
  129.         x = 128 - x ;
  130.         if( x > 254 )
  131.             x = 254 ;
  132.     }
  133.     else if( x > 127 )
  134.         x = 127 ;
  135.  
  136.     return x ;
  137. }
  138.  
  139. /*    initDataIOTFAD:fadePlayBtnId:MJ_DBUTTONL40の呼び出し関数    */
  140. int    fadePlay(kobj, messId, argc, pev, trigger)
  141. int        kobj ;
  142. int        messId ;
  143. int        argc ;
  144. EVENT    *pev ;
  145. int        trigger ;
  146. {
  147.     setMsgColor( fadeMesId[1], EXE_COLOR ) ;
  148.  
  149.     sndPlay() ;
  150.  
  151.     setMsgColor( fadeMesId[1], MOJI_COLOR ) ;
  152.  
  153.     return NOERR ;
  154. }
  155.  
  156. /*    initDataIOTFAD:fadeUndoBtnId:MJ_DBUTTONL40の呼び出し関数    */
  157. int    fadeUndo(kobj, messId, argc, pev, trigger)
  158. int        kobj ;
  159. int        messId ;
  160. int        argc ;
  161. EVENT    *pev ;
  162. int        trigger ;
  163. {
  164.     setMsgColor( fadeMesId[2], EXE_COLOR ) ;
  165.  
  166.     unDo() ;
  167.  
  168.     setMsgColor( fadeMesId[2], MOJI_COLOR ) ;
  169.  
  170.     MMI_FlushEvnt() ;    /* イベントをフラッシュ */
  171.  
  172.     return NOERR ;
  173. }
  174.  
  175. /*    initDataIOTFAD:fadeInfBtnId:MJ_DBUTTONL40の呼び出し関数    */
  176. int    fadeInf(kobj, messId, argc, pev, trigger)
  177. int        kobj ;
  178. int        messId ;
  179. int        argc ;
  180. EVENT    *pev ;
  181. int        trigger ;
  182. {
  183.     /* ダイアログを使えないようにする */
  184.     MTL_setAtrObj( fadeDialogId, MS_DSPONLYL40 ) ;
  185.  
  186.     sndInf() ;
  187.  
  188.     /* ダイアログを使えるように戻す */
  189.     MTL_resetAtrObj( fadeDialogId, (~MS_DSPONLYL40) ) ;
  190.  
  191.     return NOERR ;
  192. }
  193.  
  194. /*    initDataIOTFAD:fadeCanBtnId:MJ_DBUTTONL40の呼び出し関数    */
  195. int    fadeCanchk(kobj, messId, argc, pev, trigger)
  196. int        kobj ;
  197. int        messId ;
  198. int        argc ;
  199. EVENT    *pev ;
  200. int        trigger ;
  201. {
  202.     MMI_SetHaltFlag( TRUE ) ;
  203.     return NOERR ;
  204. }
  205.  
  206.  
  207. /* WRITE HEAD */
  208.  
  209. int    sndEffectHead()
  210. {
  211.     readSndHead() ;
  212.  
  213.     MMI_SendMessage( headDialogId, MM_ATTACH, 1, MMI_GetBaseObj() ) ;
  214.     MMI_SendMessage( headDialogId, MM_SHOW, 0 ) ;    /* 全体を見せる */
  215.  
  216.     MMI_ExecSystem() ;        /* Dialog表示へ・・・イベントループ */
  217.  
  218.     MMI_SendMessage( headDialogId, MM_ERASE, 0 ) ;
  219.     MMI_SendMessage( headDialogId, MM_DETACH, 0 ) ;
  220.  
  221.     return NOERR ;
  222. }
  223.  
  224. int readSndHead()
  225. {
  226.     SNDHEAD *head ;
  227.     int var, min, max, delta, ptColumn ;
  228.     int i, num[6] ;
  229.  
  230.     head = (SNDHEAD *)sndBuf1 ;
  231.     num[0] = head->length ;
  232.     num[1] = head->looppoint ;
  233.     num[2] = head->looplength ;
  234.     num[3] = head->freq ;
  235.     num[4] = head->adjust ;
  236.     num[5] = head->note ;
  237.  
  238.     for( i=0 ; i<6 ; i++ )
  239.     {
  240.         MMI_SendMessage( headNumId[i], MM_GETNUMBOX, 5,
  241.                             &var, &min, &max, &delta, &ptColumn ) ;
  242.         MMI_SendMessage( headNumId[i], MM_SETNUMBOX, 5, /* 変更 */
  243.                             num[i], min, max, delta, ptColumn ) ;
  244.     }
  245.  
  246.     return NOERR ;
  247. }
  248.  
  249. /*    initDataIOTHED:headOkBtnId:MJ_DBUTTONL40の呼び出し関数    */
  250. int    headOkchk(kobj, messId, argc, pev, trigger)
  251. int        kobj ;
  252. int        messId ;
  253. int        argc ;
  254. EVENT    *pev ;
  255. int        trigger ;
  256. {
  257.     SNDHEAD *head, *head2 ;
  258.     int var, min, max, delta, ptColumn ;
  259.     int i, num[6] ;
  260.  
  261.     setMsgColor( headMesId[0], EXE_COLOR ) ;
  262.  
  263.     head = (SNDHEAD *)sndBuf1 ;
  264.     for( i=0 ; i<6 ; i++ )
  265.     {
  266.         MMI_SendMessage( headNumId[i], MM_GETNUMBOX, 5,
  267.                             &var, &min, &max, &delta, &ptColumn ) ;
  268.         num[i] = var ;
  269.     }
  270.     head->length         = num[0] ;
  271.     head->looppoint        = num[1] ;
  272.     head->looplength    = num[2] ;
  273.     head->freq            = num[3] ;
  274.     head->adjust        = num[4] ;
  275.     head->note            = num[5] ;
  276.  
  277.     head2 = (SNDHEAD *)sndBuf2 ;    /* 延びた部分を0x80で埋め尽くす */
  278.     if( (head->length) > (head2->length) )
  279.     {
  280.         int s, e ;
  281.         s = head2->length + 32 ;
  282.         e = head->length  + 32 ;
  283.         if( e > sndBufSize )
  284.             e = sndBufSize ;
  285.         for( i=s ; i<e ; i++ )
  286.         {
  287.             sndBuf1[i] = 0x80 ;
  288.         }
  289.     }
  290.  
  291.     setMsgColor( headMesId[0], MOJI_COLOR ) ;
  292.  
  293.     MMI_FlushEvnt() ;    /* イベントをフラッシュ */
  294.  
  295.     return NOERR ;
  296. }
  297.  
  298. /*    initDataIOTHED:headPlayBtnId:MJ_DBUTTONL40の呼び出し関数    */
  299. int    headPlay(kobj, messId, argc, pev, trigger)
  300. int        kobj ;
  301. int        messId ;
  302. int        argc ;
  303. EVENT    *pev ;
  304. int        trigger ;
  305. {
  306.     setMsgColor( headMesId[1], EXE_COLOR ) ;
  307.  
  308.     sndPlay() ;
  309.  
  310.     setMsgColor( headMesId[1], MOJI_COLOR ) ;
  311.  
  312.     return NOERR ;
  313. }
  314.  
  315. /*    initDataIOTHED:headUndoBtnId:MJ_DBUTTONL40の呼び出し関数    */
  316. int    headUndo(kobj, messId, argc, pev, trigger)
  317. int        kobj ;
  318. int        messId ;
  319. int        argc ;
  320. EVENT    *pev ;
  321. int        trigger ;
  322. {
  323.     setMsgColor( headMesId[2], EXE_COLOR ) ;
  324.  
  325.     unDo() ;
  326.  
  327.     setMsgColor( headMesId[2], MOJI_COLOR ) ;
  328.  
  329.     MMI_FlushEvnt() ;    /* イベントをフラッシュ */
  330.  
  331.     return NOERR ;
  332. }
  333.  
  334. /*    initDataIOTHED:headCanBtnId:MJ_DBUTTONL40の呼び出し関数    */
  335. int    headCanchk(kobj, messId, argc, pev, trigger)
  336. int        kobj ;
  337. int        messId ;
  338. int        argc ;
  339. EVENT    *pev ;
  340. int        trigger ;
  341. {
  342.     MMI_SetHaltFlag( TRUE ) ;
  343.     return NOERR ;
  344. }
  345.  
  346. /*    initDataIOTHED:headInfBtnId:MJ_DBUTTONL40の呼び出し関数    */
  347. int    headInf(kobj, messId, argc, pev, trigger)
  348. int        kobj ;
  349. int        messId ;
  350. int        argc ;
  351. EVENT    *pev ;
  352. int        trigger ;
  353. {
  354.     /* ダイアログを使えないようにする */
  355.     MTL_setAtrObj( headDialogId, MS_DSPONLYL40 ) ;
  356.  
  357.     sndInf() ;
  358.  
  359.     /* ダイアログを使えるように戻す */
  360.     MTL_resetAtrObj( headDialogId, (~MS_DSPONLYL40) ) ;
  361.  
  362.     return NOERR ;
  363. }
  364.  
  365.  
  366.